<?php

/*------------------------------------------------
*
*   Explay Engine Content Management System.
*   Copyright © 2008 Golovdinov Alexander.
*
*-------------------------------------------------
*
*   Official site: wwww.alex-home.spb.ru/explay.html
*   Contact e-mail: golovdinov@gmail.com
*
*   GNU General Public License original source:
*   http://www.gnu.org/licenses/gpl-3.0.html
*
------------------------------------------------*/


if (!defined ('EXPLAY')) exit;

/**
 * User
 *
 * Авторизация, логин и логаут пользователя
 */

class User {

	public static $properties = array ();
	private static $cookies = array ('status'=>false);
	
	private function __construct () {}
	
	/**
	 * Возвращает массив с параметрами пользователя
	 * 
	 * @return array
	 */
	public static function build () {
	
		if (isset ($_COOKIE['login']) && isset ($_COOKIE['pass'])) {
			$login = mysql_escape_string ($_COOKIE['login']);
			$pass = mysql_escape_string ($_COOKIE['pass']);
			
			if ($login != '' && $pass != '') {
				self::$cookies = array ('status'=>true, 'login'=>$login, 'pass'=>$pass);
				
				self::select_user ();
				
				return self::$properties;
			}
		} else {
			return self::$properties;
		}
	}
	
	/**
	 * Логин пользователя
	 */
	public static function login () {
		
		$db = MySQL::getInstance ();
		
		$error = '';
		
		try {
		
			if (!isset ($_POST['login']) || !isset ($_POST['pass'])) throw new Exception ('Не передан логин или пароль!');
			
			$login = mysql_escape_string ($_POST['login']);
			$pass = expl_hash($_POST['pass']);
			
			(isset($_POST['url']))
				? $url = strip_tags ($_POST['url'])
				: $url = '/';
			
			(isset($_POST['remember']))
				? $time = time() + (365 * 86400)
				: $time = 0;
			
			if ($login == '' || $pass == '') throw new Exception ('Не заполнено одно из полей!');
			
			if ($error == '') {
				$get = $db->query ("SELECT * FROM ".DB_PEREFIX."_users WHERE user_login = '$login' && user_password = '$pass'");
				
				if ($db->num_rows($get) == 1) {
					$glog = $db->fetch_array($get);			
					
					setcookie ("login", $login, $time, '/', $_SERVER['HTTP_HOST']);
					setcookie ("pass",  $pass,  $time, '/', $_SERVER['HTTP_HOST']);

					self::go ($url, 'Привет, '.$glog['user_name'].'!');
					
				}
				else throw new Exception ('Не правильное сочетание логина и пароля!');
			
			} 
		}
		catch (Exception $e) {	
			self::mess ($url, $e->getMessage ());
		}
	}
	
	/**
	 * Возвращает пользователя по логину или id
	 *
	 * @param mixed $var логин или id пользоваеля пользователя
	 * @return mixed
	 */
	public static function get_user ($var) {
		
		if ($var === '' || $var === 0) return false;
		
		if (is_numeric ($var) && $var !== 0) {
			$select = ' user_id = '.$var;
		} else {
			if (!preg_match("#^[a-zA-Z0-9_-]{4,32}+$#", $var)) return false;
			$select = " user_login = '".$var."'";
		}
		
		$db = MySQL::getInstance ();
		$get = $db->query ("SELECT * FROM ".DB_PEREFIX."_users WHERE ".$select);
		if ($db->num_rows ($get) == 0) return false;
		$res = $db->fetch_array ($get);
		
		return $res;
	}
	
	/**
	 * Выбираем запись пользователя из БД и записываем его данные в $properties
	 *
	 * @return boolean
	 */
	private static function select_user () {
		$db = MySQL::getInstance ();
		
		if (self::$cookies['status'] == false) return false;
		
		$get = $db->query ("SELECT * FROM ".DB_PEREFIX."_users WHERE user_login = '".self::$cookies['login']."' AND user_password = '".self::$cookies['pass']."'");
		
		if ($db->num_rows ($get) == 1) {
			self::$properties = $db->fetch_array ($get);
			return true;
		}
		else return false;
	}
	
	
	/**
	 * Функции ответов пользователю
	 */
	public static function logout () {
		setcookie ('login', '', time()-3600, '/', $_SERVER['HTTP_HOST']);
		setcookie ('pass',  '', time()-3600, '/', $_SERVER['HTTP_HOST']);
			
		self::go ('/', 'До встречи!');	
	} 
	
	
	/**
	 * Вывод страницы с переходом
	 *
	 * @param string $url Ссылка на которую перекинет пользователя
	 * @param string $message Сообщение
	 */
	 public static function go ($url, $mess) {
		Templater::set_var ('url', $url);
		Templater::set_var ('message', $mess);
		print Templater::display ('message.tpl');
		exit;
	 }
	 
	 /**
	  * Вывод сообщения
	  *
	  * @param string $url Ссылка на которую перекинет пользователя
	  * @param string $message Сообщение
	  */
	 public static function mess ($url, $message) {
		Templater::set_var ('url', $url);
		Templater::set_var ('message', $message);
		print Templater::display ('authorization.tpl');
		exit;
	 }
	
}